package com.happy.manage.service.impl;

import java.util.List;
import com.happy.common.utils.DateUtils;
import com.happy.manage.domain.SvideoWithUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.happy.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.happy.manage.domain.Videotags;
import com.happy.manage.mapper.SvideoMapper;
import com.happy.manage.domain.Svideo;
import com.happy.manage.service.ISvideoService;

/**
 * 短视频管理Service业务层处理
 * 
 * @author 艾头条
 * @date 2024-11-16
 */
@Service
public class SvideoServiceImpl implements ISvideoService 
{
    @Autowired
    private SvideoMapper svideoMapper;

    /**
     * 查询短视频管理
     * 
     * @param videoId 短视频管理主键
     * @return 短视频管理
     */
    @Override
    public Svideo selectSvideoByVideoId(Long videoId)
    {
        return svideoMapper.selectSvideoByVideoId(videoId);
    }

    /**
     * 查询短视频管理列表
     * 
     * @param svideo 短视频管理
     * @return 短视频管理
     */
    @Override
    public List<Svideo> selectSvideoList(Svideo svideo)
    {
        return svideoMapper.selectSvideoList(svideo);
    }

    /**
     * 新增短视频管理
     * 
     * @param svideo 短视频管理
     * @return 结果
     */
    @Transactional
    @Override
    public int insertSvideo(Svideo svideo)
    {
        svideo.setCreateTime(DateUtils.getNowDate());
        int rows = svideoMapper.insertSvideo(svideo);
        insertVideotags(svideo);
        return rows;
    }

    /**
     * 修改短视频管理
     * 
     * @param svideo 短视频管理
     * @return 结果
     */
    @Transactional
    @Override
    public int updateSvideo(Svideo svideo)
    {
        svideo.setUpdateTime(DateUtils.getNowDate());
        svideoMapper.deleteVideotagsByVideoId(svideo.getVideoId());
        insertVideotags(svideo);
        return svideoMapper.updateSvideo(svideo);
    }

    /**
     * 批量删除短视频管理
     * 
     * @param videoIds 需要删除的短视频管理主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteSvideoByVideoIds(Long[] videoIds)
    {
        svideoMapper.deleteVideotagsByVideoIds(videoIds);
        return svideoMapper.deleteSvideoByVideoIds(videoIds);
    }

    /**
     * 删除短视频管理信息
     * 
     * @param videoId 短视频管理主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteSvideoByVideoId(Long videoId)
    {
        svideoMapper.deleteVideotagsByVideoId(videoId);
        return svideoMapper.deleteSvideoByVideoId(videoId);
    }

    @Override
    public List<SvideoWithUser> getSvideoWithUser(Svideo svideo) {
        return svideoMapper.getSvideoWithUser(svideo);
    }

    /**
     * 新增视频标签关联信息
     * 
     * @param svideo 短视频管理对象
     */
    public void insertVideotags(Svideo svideo)
    {
        List<Videotags> videotagsList = svideo.getVideotagsList();
        Long videoId = svideo.getVideoId();
        if (StringUtils.isNotNull(videotagsList))
        {
            List<Videotags> list = new ArrayList<Videotags>();
            for (Videotags videotags : videotagsList)
            {
                videotags.setVideoId(videoId);
                list.add(videotags);
            }
            if (list.size() > 0)
            {
                svideoMapper.batchVideotags(list);
            }
        }
    }

    /**
     * 增加视频观看次数
     *
     * @param videoId 视频ID
     * @return 结果
     */
    @Override
    public int incrementViewCount(Long videoId) {
        return svideoMapper.incrementViewCount(videoId);
    }

    /**
     * 查询关注用户的视频列表
     *
     * @param userId 用户ID
     * @return 视频列表
     */
    @Override
    public List<SvideoWithUser> selectFollowingUserVideos(Long userId)
    {
        return svideoMapper.selectFollowingUserVideos(userId);
    }
}
